package com.joker.demo.admin.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.joker.demo.admin.domain.po.EnvironmentMonitorPO;
import com.joker.demo.admin.domain.vo.EnvironmentMonitorStatisticsVO;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * 环境监控服务接口
 *
 * @author : feixiang.li
 * @since : 2025-01-27 10:30
 */
public interface EnvironmentMonitorService {

    /**
     * 保存环境监控数据
     *
     * @param monitorPO 环境监控数据
     */
    void saveMonitorData(EnvironmentMonitorPO monitorPO);

    /**
     * 清理历史数据
     *
     * @param days 保留天数
     */
    void cleanHistoryData(Integer days);

    /**
     * 分页查询
     *
     * @param page 分页参数
     * @param queryWrapper 查询条件
     * @return 分页结果
     */
    IPage<EnvironmentMonitorPO> page(Page<EnvironmentMonitorPO> page, Wrapper<EnvironmentMonitorPO> queryWrapper);

    /**
     * 查询最新的环境监控数据
     *
     * @return 最新监控数据列表
     */
    List<EnvironmentMonitorPO> queryLatestMonitorData();

    /**
     * 查询24小时内所有执行器的汇总环境监控数据
     *
     * @return 汇总监控数据列表
     */
    List<EnvironmentMonitorPO> query24HourSummaryData();

    /**
     * 查询指定执行器的最新环境监控数据
     *
     * @param registerKey 执行器标识
     * @return 最新监控数据
     */
    EnvironmentMonitorPO queryLatestMonitorDataByRegisterKey(String registerKey);

    /**
     * 查询指定执行器24小时内的汇总环境监控数据
     *
     * @param registerKey 执行器标识
     * @return 汇总监控数据
     */
    EnvironmentMonitorPO query24HourSummaryDataByRegisterKey(String registerKey);

    /**
     * 查询执行器的环境监控历史数据
     *
     * @param registerKey 执行器标识
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param limit 限制数量
     * @return 历史监控数据列表
     */
    List<EnvironmentMonitorPO> queryMonitorDataHistory(String registerKey, Date startTime, Date endTime, Integer limit);

    /**
     * 查询环境监控统计信息
     *
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计信息
     */
    EnvironmentMonitorStatisticsVO queryMonitorStatistics(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 查询所有执行器列表
     *
     * @return 执行器列表
     */
    List<String> queryAllExecutors();
}
